/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package transervfx.Logica;

import java.util.List;
import transervfx.Dato.DAO.GestorDAO;
import transervfx.Dato.Entidad.Gestor;

/**
 * Gestiona los gestores del sistema
 */
public class GestorGestor {

    private static GestorGestor INSTANCE = null;

    /**
     * Crea el GestorUsuario
     */
    private GestorGestor() {
    }

    /**
     * creador sincronizado para protegerse de posibles problemas multi-hilo
     * otra prueba para evitar instanciación múltiple
     */
    private synchronized static void createInstance() {
        if (INSTANCE == null) {
            INSTANCE = new GestorGestor();
        }
    }

    public static GestorGestor getInstance() {
        if (INSTANCE == null) {
            createInstance();
        }
        return INSTANCE;
    }

    public void guardarGestor(Gestor g) {
        GestorDAO.getInstance().persist(g);
    }

    public void actualizarGestor(Gestor r) {
        GestorDAO.getInstance().update(r);
    }

    public void eliminarGestor(Gestor r) throws Exception {

        System.out.println("POSEE GUIA: " + GestorDAO.getInstance().poseeGuia(r));
        if (GestorDAO.getInstance().poseeGuia(r)) {
            throw new Exception("El gestor posee una guia, no puede ser eliminado");
        }

        GestorDAO.getInstance().remove(r);
    }

    

    public List<Gestor> findAll() {
        return GestorDAO.getInstance().findAll();
    }

    public Gestor findByCompleto(Gestor gestorSeleccionado) {
        return GestorDAO.getInstance().findByCompleto(gestorSeleccionado);
    }

    public List<Gestor> findByNombresAndApellido(String nombres, String apellido) {
        return GestorDAO.getInstance().findByNombresAndApellido(nombres, apellido);
    }

    public boolean existeGestor(String tipoDoc, Integer nroDoc) {
        Gestor r = GestorDAO.getInstance().findByTipoDocAndNroDoc(tipoDoc, nroDoc);
        if (r == null) {
            return false;
        } else {
            return true;
        }
    }

    public Long numeroDeGestoresFiltrados(String apellido, String nombres, String tipoDocumento, Integer numeroDocumento, String condicionIva) {
        return GestorDAO.getInstance().numeroDeGestoresFiltrados(apellido, nombres, tipoDocumento, numeroDocumento, condicionIva);
    }

    public List<Gestor> buscarPorFiltro(String apellido, String nombres, String tipoDocumento, Integer numeroDocumento, String condicionIva, int ini, int fin) {
        return GestorDAO.getInstance().buscarPorFiltroRango(apellido, nombres, tipoDocumento, numeroDocumento, condicionIva, ini, fin);
    }
}
